package controllers;

import java.util.Set;

import models.Medida;
import models.MedidaAluno;
import models.Usuario;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.Security;
import dao.DAOMedida;
import dao.DAOMedidaAluno;

@Security.Authenticated(Seguranca.class)
public class MedidaAlunoControle extends Controller {

	private static Form<MedidaAluno> formMedidaAluno = new Form<MedidaAluno>(MedidaAluno.class);
	  
    public static Result index() {
        return ok();//views.html.medidaAluno.index.render(""));
    }
	
	public static Result cadastrarView(){
		
		DAOMedida dao = new DAOMedida();
		try {
			return ok(views.html.medidaAluno.cadastrar.render(dao.select()));
		} catch (Exception e) {
			return internalServerError("Erro ao recuperar medida do aluno.");
		}

	}
	
	public static Result editarView(int idUsuario, String data ){
		
		MedidaAluno medidaA = new MedidaAluno();
		medidaA.idUsuario = idUsuario;
		medidaA.data = data;
		
		DAOMedidaAluno dao = new DAOMedidaAluno();
		try{
			MedidaAluno medidaAluno = new MedidaAluno();
			Usuario usu = dao.selectXIdEData(medidaA);
			return ok(views.html.medidaAluno.editar.render(usu.medidas));
		}catch(Exception e){
			return internalServerError("Erro ao visualizar medida do aluno.");
		}
		
	}
	
	public static Result listarView(){
		DAOMedidaAluno dao = new DAOMedidaAluno();
		try {
			Set<MedidaAluno> medidasAlunos = dao.selectDatas(Integer.parseInt(session("usuario_selecionado_id")));
			return ok(views.html.medidaAluno.listar.render(medidasAlunos));
		} catch (Exception e) {
			return internalServerError("Erro ao visualizar Medidas dos alunos .");
		}
		
	}
	
	public static Result cadastrar(){
		Form<MedidaAluno> novoMedidaAluno = formMedidaAluno.bindFromRequest();
		//MedidaAluno medidaAluno = novoMedidaAluno.get();
		
		Usuario usu = new Usuario();
		usu.idUsuario = Integer.parseInt(session("usuario_selecionado_id"));
		
		DAOMedida daoMedida = new DAOMedida();
		
		DAOMedidaAluno dao = new DAOMedidaAluno();
		try{
			
			Set<Medida> medidas = daoMedida.select();
			
			for (Medida medida : medidas) {
				try {
					MedidaAluno medidaAluno = new MedidaAluno();
					medidaAluno.idMedida = medida.idMedida;
					medidaAluno.valor =  Float.parseFloat(request().getQueryString("medida_"+ medida.idMedida).replace(",", "."));
					usu.medidas.add(medidaAluno);
				} catch (Exception e) {}
			}
			
			if (!usu.medidas.isEmpty()) {
				dao.insert(usu);
			} else {
				return ok("Não tem medidas");
			}
			
			return listarView();
			//return ok(views.html.index.render("Exercicio Cadastrado com sucesso."));
		}catch(Exception e){
			return ok();//views.html.medidaAluno.index.render("Erro ao cadastrar medida."));
		}
	}
	
	public static Result editar(){
		Form<MedidaAluno> novoMedidaAluno = formMedidaAluno.bindFromRequest();
		MedidaAluno medidaAluno = novoMedidaAluno.get();
		
		DAOMedidaAluno dao = new DAOMedidaAluno();
		try{
			dao.update(medidaAluno);
			return listarView();
		}catch(Exception e){
			e.printStackTrace();
			//return ok(views.html.medidaAluno.index.render("Erro ao editar medida."));
		}
		return ok("");
	}
	
	public static Result remover(){
		Form<MedidaAluno> novoMedidaAluno = formMedidaAluno.bindFromRequest();
		MedidaAluno MedidaAluno = novoMedidaAluno.get();
		DAOMedidaAluno dao = new DAOMedidaAluno();
		try{
			dao.delete(MedidaAluno);
			return listarView();
		}catch(Exception e){
			e.printStackTrace();
			//return ok(views.html.medidaAluno.index.render("Erro ao remover Medida."));
		}
		return ok("");
	}
	
}
